home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr48
/
vdl020d.zip
/
VMSCDEX.DOC
< prev
next >
Wrap
Text File
|
1993-04-14
|
26KB
|
1,306 lines
{
════════════════════════════════════════════════════════════════════════════
Visionix Microsoft CD-ROM Extensions Unit (VMSCDEX)
Copyright 1991,92,93 Visionix
ALL RIGHTS RESERVED
────────────────────────────────────────────────────────────────────────────
Revision history in reverse chronological order:
Initials Date Comment
──────── ──────── ────────────────────────────────────────────────────────
lpg 03/16/93 Added Source Documentation
mep 02/11/93 Cleaned up code (yuck!) for beta release
jrt 02/08/93 Sync with beta 0.12 release
jrt 12/07/92 Sync with beta 0.11 release
jrt 11/21/92 Sync with beta 0.08
jrt 11/18/92 First logged revision.
────────────────────────────────────────────────────────────────────────────
}
Unit VMSCDEX;
Uses
VTypes,
VGen,
DOS;
{────────────────────────────────────────────────────────────────────────────}
Type
TError = WORD;
Type
TMSF = RECORD
M : BYTE;
S : BYTE;
F : BYTE;
P : BYTE;
END;
PMSF = ^TMSF;
Type
TUPCCode = Array[1..7] of BYTE;
PUPCCode = ^TUPCCode;
Type
TmscdexReqHeader = RECORD
HeaderSize : BYTE;
Subunit : BYTE;
CommandCode : BYTE;
Status : WORD;
Reserved : Array[1..8] of BYTE;
END;
PmscdexReqHeader = ^TmscdexReqHeader;
{------------------------}
{ MSCDEX IOCTL Requests }
{------------------------}
Type
TmscdexIOCTLReq = RECORD
Header : TmscdexReqHeader;
MediaDescript : BYTE;
ControlBlock : POINTER;
ControlBlockSize : WORD;
StartingSector : WORD;
RequestedVol : POINTER;
END;
PmscdexIOCTLReq = ^TmscdexIOCTLReq;
{--------------------------------}
{ IOCTL Read Control Block Types }
{--------------------------------}
Const
cmscdexIOCTLread = 3;
Type
TmscdexGetDevAddr = RECORD
ConBCode : BYTE;
DevAddr : POINTER;
END;
PmscdexGetDevAddr = ^TmscdexGetDevAddr;
Type
TmscdexGetHeadPos = RECORD
ConBCode : BYTE;
AddrMode : BYTE;
HeadPos : LONGINT
END;
Const
cmscdexGetHeadPos = 1;
cmscdexGetHeadPosCBS = 5;
Type
TmscdexAudioChanInfo = RECORD
ConBCode : BYTE;
InChan0 : BYTE;
Volume0 : BYTE;
InChan1 : BYTE;
Volume1 : BYTE;
InChan2 : BYTE;
Volume2 : BYTE;
InChan3 : BYTE;
Volume3 : BYTE;
END;
PmscdexAudioChanInfo = ^TmscdexAudioChanInfo;
Const
cmscdexGetAudioChanInfo = 4;
cmscdexGetAudioChanInfoCBS = 9;
Type
TmscdexDevStatus = RECORD
ConBCode : BYTE;
DevParams : LONGINT;
END;
PmscdexDevStatus = ^TmscdexDevStatus;
Const
cmscdexGetDevStatus = 6;
cmscdexGetDevStatusCBS = 5;
Const
cmscdexDoorOpen = 1;
cmscdexDoorLocked = 2;
cmscdexCanRawRead = 4;
cmscdexReadWrite = 8;
cmscdexCanPlayAudio = 16;
cmscdexCanInterleave = 32;
cmscdexCanPrefetch = 64;
cmscdexCanSetVolume = 128;
cmscdexCanRedbook = 256;
cmscdexNoDisc = 1024;
Type
TmscdexGetSecSize = RECORD
ConBCode : BYTE;
ReadMode : BYTE;
SectorSize : WORD;
END;
PmscdexGetSecSize = ^TmscdexGetSecSize;
Const
cmscdexGetSecSize = 7;
cmscdexGetSecSizeCBS = 4;
Type
TmscdexGetVolumeSize = RECORD
ConBCode : BYTE;
VolumeSize : LONGINT;
END;
PmscdexGetVolumSize = ^TmscdexGetVolumeSize;
Const
cmscdexGetVolumeSize = 8;
cmscdexGetVolumeSizeCBS = 5;
Type
TmscdexCheckMediaChange = RECORD
ConBCode : BYTE;
MediaStatus : BYTE;
END;
PmscdexCheckmediaChange = ^TmscdexCheckMediaChange;
Const
cmscdexCheckMediaChange = 9;
cmscdexCheckMediaChangeCBS = 2;
Const
cmscdexMediaNotChanged = $01;
cmscdexMediaMaybeChanged = $00;
cmscdexMeidaChanged = $FF;
Type
TmscdexGetAudioDiskInfo = RECORD
ConBCode : BYTE;
LowestTrack : BYTE;
HighestTrack : BYTE;
StartOfLeadout : LONGINT;
END;
PmscdexGetAudioDiskInfo = ^TmscdexGetAudioDiskInfo;
Const
cmscdexGetAudioDiskInfo = 10;
cmscdexGetAudioDiskInfoCBS = 7;
Type
TmscdexGetAudioTrackInfo = RECORD
ConBCode : BYTE;
TrackNum : BYTE;
StartPoint : LONGINT;
TrackConInfo : BYTE;
END;
PmscdexGetAudioTrackInfo = ^TmscdexGetAudioTrackInfo;
Const
cmscdexGetAudioTrackInfo = 11;
cmscdexGetAudioTrackInfoCBS = 7;
Type
TmscdexGetAudioQChanInfo = RECORD
ConBCode : BYTE;
ControlAndAddr : BYTE;
TrackNum : BYTE;
IndexNum : BYTE;
TrackTime : TMSF;
DiskTime : TMSF;
END;
PmscdexGetAudioQChanInfo = ^TmscdexGetAudioQChanInfo;
Const
cmscdexGetAudioQChanInfo = 12;
cmscdexGetAudioQChanInfoCBS = 11;
Type
TmscdexGetAudioSubChanInfo = RECORD
ConBCode : BYTE;
StartFrame : LONGINT;
TransferAddr : POINTER;
SecsToRead : LONGINT;
END;
PmscdexGetAudioSubChanInfo = ^TmscdexGetAudioSubChanInfo;
Const
cmscdexGetAudioSubChanInfo = 13;
cmscdexGetAudioSubChanInfoCBS = 13;
Type
TmscdexGetUPCCode = RECORD
ConBCode : BYTE;
ControlAndAdr : BYTE;
UPCCode : TUPCCode;
Zero : BYTE;
AFrame : BYTE;
END;
PmscdexGetUPCCode = ^TmscdexGetUPCCode;
Const
cmscdexGetUPCCode = 14;
cmscdexGetUPCCodeCBS = 11;
Type
TmscdexGetAudioStatusInfo = RECORD
ConBCode : BYTE;
AudioStatus : WORD;
PlayStart : LONGINT;
PlayEnd : LONGINT;
END;
PmscdexGetAudioStatusInfo = ^TmscdexGetAudioStatusInfo;
Const
cmscdexGetAudioStatusInfo = 15;
cmscdexGetAudioStatusInfoCBS = 11;
{---------------------------------}
{ IOCTL Write Control Block Types }
{---------------------------------}
Const
cmscdexIOCTLWrite = 12;
Type
TmscdexEjectDisk = RECORD
ConBCode : BYTE;
END;
PmscdexEjectDisk = ^TmscdexEjectDisk;
Const
cmscdexEjectDisk = 0;
cmscdexEjectDiskCBS = 1;
Type
TmscdexLockUnlockDoor = RECORD
ConBCode : BYTE;
LockCode : BYTE;
END;
PmscdexLockUnlockDoor = ^TmscdexLockUnlockDoor;
Const
cmscdexLockUnlockDoor = 1;
cmscdexLockUnlockDoorCBS = 2;
Const
cmscdexLockDoor = 1;
cmscdexUnlockDoor = 0;
Type
TmscdexResetDrive = RECORD
ConBCode : BYTE;
END;
PmscdexResetDrive = ^TmscdexResetDrive;
Const
cmscdexResetDrive = 2;
cmscdexResetDriveCBS = 1;
Type
TmscdexAudioChanControl = RECORD
ConBCode : BYTE;
InChan0 : BYTE;
Volume0 : BYTE;
InChan1 : BYTE;
Volume1 : BYTE;
InChan2 : BYTE;
Volume2 : BYTE;
InChan3 : BYTE;
Volume3 : BYTE;
END;
PmscdexAudioChanControl = ^TmscdexAudioChanControl;
Const
cmscdexAudioChanControl = 3;
cmscdexAudioChanControlCBS = 9;
Type
TmscdexCloseTray = RECORD
ConBCode : BYTE;
END;
PmscdexCloseTray = ^TmscdexCloseTray;
Const
cmscdexCloseTray = 5;
cmscdexCloseTrayCBS = 1;
{--------------------------}
{ MSCDEX Read Long Request }
{--------------------------}
Type
TmscdexReadLongReq = RECORD
Header : TmscdexReqHeader;
AddrMode : BYTE;
TransferAddr : POINTER;
SecsToRead : WORD;
StartSec : LONGINT;
ReadMode : BYTE;
InterleaveSize : BYTE;
InterleaveSkip : BYTE;
END;
PmscdexReadLongReq = ^TmscdexReadLongReq;
Const
cmscdexBlockMode = 0;
cmscdexHSGMode = 0;
cmscdexMSFMode = 1;
cmscdexReadBookMode = 1;
cmscdexCookedRead = 0;
cmscdexRawRead = 1;
Type
TmscdexPlayAudioReq = RECORD
Header : TmscdexReqHeader;
AddrMode : BYTE;
Start : LONGINT;
PlayFor : LONGINT;
END;
PmscdexPlayAudioReq = ^TmscdexPlayAudioReq;
Type
TmscdexStopAudioReq = RECORD
Header : TmscdexReqHeader;
END;
PmscdexStopAudioReq = ^TmscdexStopAudioReq;
Type
TmscdexResumeAudioReq = RECORD
Header : TmscdexReqHeader;
END;
PmscdexResumeAudioReq = ^TmscdexResumeAudioReq;
{────────────────────────────────────────────────────────────────────────────}
{────────────────────────────────────────────────────────────────────────────}
Procedure BCDMSFtoMSF( Var N : TMSF );
Function MSCDEX_GetNumDrives : WORD;
Function MSCDEX_GetFirstDrive : WORD;
Procedure MSCDEX_ExecRequest( Drive : BYTE;
Request : POINTER );
{----------------------}
{ Read IOCTL Functions }
{----------------------}
Function MSCDEX_GetHeadPos( Drive : BYTE;
AddrMode : BYTE;
Var HeadPos : LONGINT ) : TError;
Function MSCDEX_GetAudioChanInfo( Drive : BYTE;
Channel : BYTE;
Var InputChan : BYTE;
Var Volume : BYTE ) : TError;
Function MSCDEX_GetDevStatus( Drive : BYTE;
Var DevStatus : LONGINT ) : TError;
Function MSCDEX_GetSectorSize( Drive : BYTE;
ReadMode : BYTE;
Var SecSize : WORD ) : TError;
Function MSCDEX_GetVolumeSize( Drive : BYTE;
Var VolumeSize : LONGINT ) : TError;
Function MSCDEX_IsMediaChanged ( Drive : BYTE ) : BYTE;
Function MSCDEX_GetAudioDiskInfo( Drive : BYTE;
Var StartTrack : BYTE;
Var EndTrack : BYTE;
Var LeadOutStart : LONGINT ) : TError;
Function MSCDEX_GetAudioTrackInfo( Drive : BYTE;
TrackNum : BYTE;
Var StartPoint : LONGINT;
Var TrackConInfo : BYTE ) : TError;
Function MSCDEX_GetAudioQChanInfo( Drive : BYTE;
Var ConAddr : BYTE;
Var TrackNum : BYTE;
Var IndexNum : BYTE;
Var TrackTime : TMSF;
Var DiskTime : TMSF ) : TError;
Function MSCDEX_GetAudioSubChanInfo( Drive : BYTE;
StartFrame : LONGINT;
SecsToRead : LONGINT;
TransferAddr : POINTER ) : TError;
Function MSCDEX_GetUPCCode( Drive : BYTE;
Var ConAddr : BYTE;
Var UPCCode : TUPCCode;
Var AFrame : BYTE ) : Terror;
Function MSCDEX_GetAudioStatusInfo( Drive : BYTE;
Var AudioStatus : WORD;
Var PlayStart : LONGINT;
Var PlayEnd : LONGINT ) : TError;
{-----------------------}
{ IOCTL Write Functions }
{-----------------------}
Function MSCDEX_EjectDisk( Drive : BYTE ) : TError;
Function MSCDEX_LockUnlockDoor( Drive : BYTE;
Lock : BOOLEAN ) : TError;
Function MSCDEX_ResetDrive( Drive : BYTE ) : TError;
{-----------------------}
{ Audio Channel Control }
{-----------------------}
Function MSCDEX_CloseTray( Drive : BYTE ) : TError;
Function MSCDEX_ReadLong( Drive : BYTE;
AddrMode : BYTE;
TransferAddr : POINTER;
SecsToRead : WORD;
StartSec : LONGINT;
ReadMode : BYTE;
InterleaveSize : BYTE;
InterleaveSkip : BYTE ) : TError;
{----------------}
{ prefetch, seek }
{----------------}
Function MSCDEX_PlayAudio( Drive : BYTE;
AddrMode : BYTE;
Start : LONGINT;
Playfor : LONGINT ) : TError;
Function MSCDEX_StopAudio( Drive : BYTE ) : TError;
Function MSCDEX_ResumeAudio( Drive : BYTE ) : TError;
{────────────────────────────────────────────────────────────────────────────}
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetNumDrives : WORD;
[PARAMETERS]
(None)
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetFirstDrive : WORD;
[PARAMETERS]
(None)
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure MSCDEX_ExecRequest( Drive : BYTE;
Request : POINTER );
[PARAMETERS]
Drive CD-ROM Drive Number
Request Pointer to MSCDEX Request Packet
[RETURNS]
(None)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure MSCDEX_LoadIOR( IOR : PmscdexIOCTLReq;
ReqHeadLength : BYTE;
CommandCode : BYTE;
MediaDescript : BYTE;
ControlBlock : POINTER;
CBS : WORD );
[PARAMETERS]
IOR Pointer to MSCDEX IOCtl Request Packet
ReqHeadLength Request Header Length
CommandCode ?
MediaDescript ?
ControlBlock ?
CBS ?
[RETURNS]
(None)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetHeadPos( Drive : BYTE;
AddrMode : BYTE;
Var HeadPos : LONGINT ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
AddrMode ?
HeadPos VAR Returned ?
[RETURNS]
Function : ?
(VAR : [HeadPos] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetAudioChanInfo( Drive : BYTE;
Channel : BYTE;
Var InputChan : BYTE;
Var Volume : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
Channel ?
InputChan VAR Returned ?
Volume VAR Returned ?
[RETURNS]
Function : ?
(VAR : [InputChan] ?)
(VAR : [Volume] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetDevStatus( Drive : BYTE;
Var DevStatus : LONGINT ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
DevStatus VAR Returned ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetSectorSize( Drive : BYTE;
ReadMode : BYTE;
Var SecSize : WORD ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
ReadMode ?
SecSize VAR Returned Sector Size
[RETURNS]
Function : ?
(VAR : [SecSize] Sector Size)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetVolumeSize( Drive : BYTE;
Var VolumeSize : LONGINT ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
VolumeSize VAR Returned ?
[RETURNS]
Function : ?
(VAR : [VolumeSize] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_IsMediaChanged( Drive : BYTE ) : BYTE;
[PARAMETERS]
Drive CD-ROM Drive Number
[RETURNS]
Whether the CD-ROM Media has been Changed (TRUE=Changed)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetAudioDiskInfo( Drive : BYTE;
Var StartTrack : BYTE;
Var EndTrack : BYTE;
Var LeadOutStart : LONGINT ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
StartTrack VAR Returned ?
EndTrack VAR Returned ?
LeadOutStart VAR Returned ?
[RETURNS]
Function : ?
(VAR : [StartTrack] ?)
(VAR : [EndTrack] ?)
(VAR : [LeadOutStart] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetAudioTrackInfo( Drive : BYTE;
TrackNum : BYTE;
Var StartPoint : LONGINT;
Var TrackConInfo : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
TrackNum ?
StartPoint VAR Returned ?
TrackConinfo VAR Returned ?
[RETURNS]
Function : ?
(VAR : [StartPoint] ?)
(VAR : [TrackConInfo] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetAudioQChanInfo( Drive : BYTE;
Var ConAddr : BYTE;
Var TrackNum : BYTE;
Var IndexNum : BYTE;
Var TrackTime : TMSF;
Var DiskTime : TMSF ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
ConAddr VAR Returned ?
TrackNum VAR Returned ?
IndexNum VAR Returned ?
TrackTime VAR Returned ?
DiskTime VAR Returned ?
[RETURNS]
Function : ?
(VAR : [ConAddr] ?)
(VAR : [TrackNum] ?)
(VAR : [IndexNum] ?)
(VAR : [TrackTime] ?)
(VAR : [DiskTime] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetAudioSubChanInfo( Drive : BYTE;
StartFrame : LONGINT;
SecsToRead : LONGINT;
TransferAddr : POINTER ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
StartFrame ?
SecsToRead ?
TransferAddr ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetUPCCode( Drive : BYTE;
Var ConAddr : BYTE;
Var UPCCode : TUPCCode;
Var AFrame : BYTE ) : Terror;
[PARAMETERS]
Drive CD-ROM Drive Number
ConAddr VAR Returned ?
UPCCode VAR Returned ?
AFrame VAR Returned ?
[RETURNS]
Function : ?
(VAR : [ConAddr] ?)
(VAR : [UPCCode] ?)
(VAR : [AFrame] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_GetAudioStatusInfo( Drive : BYTE;
Var AudioStatus : WORD;
Var PlayStart : LONGINT;
Var PlayEnd : LONGINT ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
AudioStatus VAR Returned ?
PlayStart VAR Returned ?
PlayEnd VAR Returned ?
[RETURNS]
Function : ?
(VAR : [AudioStatus] ?)
(VAR : [PlayStart] ?)
(VAR : [PlayEnd] ?)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_EjectDisk( Drive : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_LockUnlockDoor( Drive : BYTE;
Lock : BOOLEAN ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
Lock Is Action Lock Door? (TRUE=Yes)
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_ResetDrive( Drive : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_CloseTray( Drive : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_ReadLong( Drive : BYTE;
AddrMode : BYTE;
TransferAddr : POINTER;
SecsToRead : WORD;
StartSec : LONGINT;
ReadMode : BYTE;
InterleaveSize : BYTE;
InterleaveSkip : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
AddrMode ?
TransferAddr ?
SecsToRead ?
StartSec ?
ReadMode ?
InterleaveSize ?
InterleaveSkip ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_PlayAudio( Drive : BYTE;
AddrMode : BYTE;
Start : LONGINT;
PlayFor : LONGINT ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
AddrMode ?
Start ?
PlayFor ?
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_StopAudio( Drive : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Function MSCDEX_ResumeAudio( Drive : BYTE ) : TError;
[PARAMETERS]
Drive CD-ROM Drive Number
[RETURNS]
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]